#ifndef STUDENT_H_
#define STUDENT_H_
#include <iosfwd>
#include <vector>
#include <string>

#include "schedule.h"
#include "curriculum.h"

class Course;

class Student {

protected:

    int studentID;
    Schedule currentSched;
    std::vector<Course> completedCourses;
    std::string firstName;
    std::string lastName;
    std::string passHash;
    std::string curriculumFile;
    Curriculum* pStudentCurr; // To be added later
    //	vector <Schedule> pastSchedules; // To be added later	
    //	Restrictions studentRestr; // To be added later
    
public:
    Student( int studentID, const std::string& first, const std::string& last);
    Student();
    Schedule getCurrSchedule() const;
    //	Schedule getSchedule(int timePeriod); Later feature
    std::vector<Course> getCompletedCourses() const;
    bool isTaken(Course * queryCourse) const;
    bool isRequired(Course * queryCourse) const;
    //	void archiveSchedule(); // Later Feature
    void addCompletedCourse();
    
    
    //Setters
    bool setFirstName ( const std::string& name );
    bool setLastName ( const std::string& name );
    bool setStudentID ( int id );
    bool setStudentID ( const std::string& id );
    bool setPassword ( const std::string& pass );
    bool setCurriculumFile( const std::string& curr );
    
    

    //Getters
    std::string getFirstName () const;
    std::string getLastName () const;
    int getStudentId () const;
    bool isCorrectPassword( const std::string& pass ) const;
    std::string getCurriculumFile( ) const;
    
    Curriculum* getCurriculum() const;
    

    Student* getStudent(  );
    
    friend std::ostream& operator<<(std::ostream& output, const Student& s);
    
};


#endif

